﻿using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.IO;
using System.Xml.Linq;
using System.Linq;
using System.Net;


namespace PanoramaApp1
{
    public class MainViewModel : INotifyPropertyChanged
    {        
        public bool IsPlaying { get; set; }

        private MediaElement player = new MediaElement();
        public MediaElement Player 
        {
            get { return player; }
            set { player = value; } 
        }

        private OmrådeEnums _område = OmrådeEnums.Örebro;
        public OmrådeEnums Område 
        {
            get 
            { 
                //if (_område != null) 
                    return _område; 
               // else throw new NullReferenceException(); 
            }
            set { _område = value; } 
        }

        public MainViewModel()
        {
            this.Items = new ObservableCollection<ItemViewModel>();
            this.UriItems = new ObservableCollection<GetUriModel>();
            this.IsPlaying = false;
        }

        /// <summary>
        /// A collection for ItemViewModel objects.
        /// </summary>
        public ObservableCollection<ItemViewModel> Items { get; private set; }

        public ObservableCollection<GetUriModel> UriItems { get; set; }

        private string _sampleProperty = "Sample Runtime Property Value";
        /// <summary>
        /// Sample ViewModel property; this property is used in the view to display its value using a Binding
        /// </summary>
        /// <returns></returns>
        public string SampleProperty
        {
            get
            {
                return _sampleProperty;
            }
            set
            {
                if (value != _sampleProperty)
                {
                    _sampleProperty = value;
                    NotifyPropertyChanged("SampleProperty");
                }
            }
        }

        public bool IsDataLoaded
        {
            get;
            private set;
        }

        public string HämtaUriAdress(OmrådeEnums område)
        {
            string områdeUri = "";

            switch (område)
            {
                case OmrådeEnums.Örebro:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3793";
                        break;
                    }
                case OmrådeEnums.Väst:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3784";
                        break;
                    }
                case OmrådeEnums.Östergötland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3794";
                        break;
                    }
                case OmrådeEnums.P3Nyheter:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=7565";
                        break;
                    }
                case OmrådeEnums.Västmanland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3792";
                        break;
                    }
                case OmrådeEnums.Västernorrland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3791";
                        break;
                    }
                case OmrådeEnums.Västerbotten:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3790";
                        break;
                    }

                case OmrådeEnums.Värmland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3789";
                        break;
                    }
                case OmrådeEnums.Uppland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3788";
                        break;
                    }
                case OmrådeEnums.Sörmland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3787";
                        break;
                    }
                case OmrådeEnums.Stockholm:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3783";
                        break;
                    }
                case OmrådeEnums.Skaraborg:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3786";
                        break;
                    }
                case OmrådeEnums.Sjuhärad:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3785";
                        break;
                    }
                case OmrådeEnums.Norrbotten:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3782";
                        break;
                    }
                case OmrådeEnums.Malmö:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3781";
                        break;
                    }
                case OmrådeEnums.Kronoberg:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3780";
                        break;
                    }
                case OmrådeEnums.Kalmar:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3778";
                        break;
                    }
                case OmrådeEnums.Kristianstad:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3779";
                        break;
                    }
                case OmrådeEnums.Jönköping:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3777";
                        break;
                    }
                case OmrådeEnums.Jämtland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3776";
                        break;
                    }
                case OmrådeEnums.Halland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3775";
                        break;
                    }
                case OmrådeEnums.Göteborg:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3774";
                        break;
                    }
                case OmrådeEnums.Gävleborg:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3773";
                        break;
                    }
                case OmrådeEnums.Gotland:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3772";
                        break;
                    }
                case OmrådeEnums.Dalarna:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3771";
                        break;
                    }
                case OmrådeEnums.Blekinge:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=3770";
                        break;
                    }
                default:
                    {
                        områdeUri = @"http://api.sr.se/api/rssfeed/rssfeed.aspx?Poddfeed=7565";
                        break;
                    }
            }

            return områdeUri;
        }

        public void LaddaMainPageRadioOmråden()
        {
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.P3Nyheter.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.P3Nyheter) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Örebro.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Örebro) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Stockholm.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Stockholm) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Göteborg.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Göteborg) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Malmö.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Malmö) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Uppland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Uppland) });

            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Blekinge.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Blekinge) });            
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Dalarna.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Dalarna) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Gotland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Gotland) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Gävleborg.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Gävleborg) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Halland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Halland) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Jämtland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Jämtland) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Jönköping.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Jönköping) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Kristianstad.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Kristianstad) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Kalmar.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Kalmar) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Kronoberg.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Kronoberg) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Norrbotten.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Norrbotten) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Sjuhärad.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Sjuhärad) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Skaraborg.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Skaraborg) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Sörmland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Sörmland) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Värmland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Värmland) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Väst.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Väst) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Västmanland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Västmanland) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Västerbotten.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Västerbotten) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Västernorrland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Västernorrland) });
            this.UriItems.Add(new GetUriModel() { LineOmråde = OmrådeEnums.Östergötland.ToString(), LineAddress = HämtaUriAdress(OmrådeEnums.Östergötland) });
            
        }

        public void ReadRss()
        {
            WebClient wClient = new WebClient();

            wClient.OpenReadCompleted += (sender, e) =>
                {
                    if (e.Error != null)
                        return;
                    
                    Stream stream = e.Result;
                    XDocument xDoc = XDocument.Load(stream);

                    List<RssFeedItem> lstFeedItems = (from item in xDoc.Descendants("item")
                                                      select new RssFeedItem()
                                                      {
                                                          Title = item.Element("title").Value,
                                                          URL = new Uri(item.Element("link").Value, UriKind.Absolute),
                                                          Rubrik = item.Element("title").Value,
                                                      }).Take(10).ToList();
                    
                    stream.Close();

                    this.Items.Clear();
                    foreach (RssFeedItem item in lstFeedItems)
                    {
                        this.Items.Add(new ItemViewModel() { LineOne = item.Title, LineTwo = item.URL.ToString(), LineThree = item.Rubrik });
                    }
                    this.IsDataLoaded = true;
                };
            wClient.OpenReadAsync(new Uri(HämtaUriAdress(Område), UriKind.Absolute));           
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (null != handler)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}